// $ANTLR 3.5.1 parser\\GeneralSQL.g 2014-02-28 14:59:17
 
package parser;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;

@SuppressWarnings("all")
public class GeneralSQLParser extends Parser {
	public static final String[] tokenNames = new String[] {
		"<invalid>", "<EOR>", "<DOWN>", "<UP>", "A", "ALL", "AND", "ANY", "AS", 
		"ASC", "B", "BETWEEN", "BY", "C", "CASE", "COLON", "COMMA", "COUNT", "Comment", 
		"D", "DELETE", "DESC", "DISTINCT", "DIVIDE", "DOT", "Digit", "E", "ELSE", 
		"END", "EQ", "EXISTS", "Exponent", "F", "FALSE", "FROM", "FULL", "Float", 
		"G", "GROUP", "GT", "GTE", "H", "HAVING", "I", "IN", "INNER", "INSERT", 
		"INTO", "IS", "Identifier", "Integer", "J", "JOIN", "K", "L", "LCURLY", 
		"LEFT", "LIKE", "LPAREN", "LT", "LTE", "M", "MAX", "MIN", "MINUS", "MOD", 
		"N", "NATURAL", "NEQ1", "NEQ2", "NOT", "NULL", "O", "ON", "OR", "ORDER", 
		"OUTER", "P", "PERCENT", "PLUS", "Q", "QUESTION", "QuotedIdentifier", 
		"R", "RCURLY", "RIGHT", "RPAREN", "S", "SELECT", "SEMI", "SET", "SOME", 
		"STAR", "STRCAT", "String", "T", "THEN", "TOP", "TRUE", "Timestamp", "U", 
		"UNION", "UNIQUE", "UPDATE", "USING", "V", "VALUES", "W", "WHEN", "WHERE", 
		"Whitespace", "X", "Y", "Z", "'{d'", "'{t'", "'{ts'"
	};
	public static final int EOF=-1;
	public static final int T__114=114;
	public static final int T__115=115;
	public static final int T__116=116;
	public static final int A=4;
	public static final int ALL=5;
	public static final int AND=6;
	public static final int ANY=7;
	public static final int AS=8;
	public static final int ASC=9;
	public static final int B=10;
	public static final int BETWEEN=11;
	public static final int BY=12;
	public static final int C=13;
	public static final int CASE=14;
	public static final int COLON=15;
	public static final int COMMA=16;
	public static final int COUNT=17;
	public static final int Comment=18;
	public static final int D=19;
	public static final int DELETE=20;
	public static final int DESC=21;
	public static final int DISTINCT=22;
	public static final int DIVIDE=23;
	public static final int DOT=24;
	public static final int Digit=25;
	public static final int E=26;
	public static final int ELSE=27;
	public static final int END=28;
	public static final int EQ=29;
	public static final int EXISTS=30;
	public static final int Exponent=31;
	public static final int F=32;
	public static final int FALSE=33;
	public static final int FROM=34;
	public static final int FULL=35;
	public static final int Float=36;
	public static final int G=37;
	public static final int GROUP=38;
	public static final int GT=39;
	public static final int GTE=40;
	public static final int H=41;
	public static final int HAVING=42;
	public static final int I=43;
	public static final int IN=44;
	public static final int INNER=45;
	public static final int INSERT=46;
	public static final int INTO=47;
	public static final int IS=48;
	public static final int Identifier=49;
	public static final int Integer=50;
	public static final int J=51;
	public static final int JOIN=52;
	public static final int K=53;
	public static final int L=54;
	public static final int LCURLY=55;
	public static final int LEFT=56;
	public static final int LIKE=57;
	public static final int LPAREN=58;
	public static final int LT=59;
	public static final int LTE=60;
	public static final int M=61;
	public static final int MAX=62;
	public static final int MIN=63;
	public static final int MINUS=64;
	public static final int MOD=65;
	public static final int N=66;
	public static final int NATURAL=67;
	public static final int NEQ1=68;
	public static final int NEQ2=69;
	public static final int NOT=70;
	public static final int NULL=71;
	public static final int O=72;
	public static final int ON=73;
	public static final int OR=74;
	public static final int ORDER=75;
	public static final int OUTER=76;
	public static final int P=77;
	public static final int PERCENT=78;
	public static final int PLUS=79;
	public static final int Q=80;
	public static final int QUESTION=81;
	public static final int QuotedIdentifier=82;
	public static final int R=83;
	public static final int RCURLY=84;
	public static final int RIGHT=85;
	public static final int RPAREN=86;
	public static final int S=87;
	public static final int SELECT=88;
	public static final int SEMI=89;
	public static final int SET=90;
	public static final int SOME=91;
	public static final int STAR=92;
	public static final int STRCAT=93;
	public static final int String=94;
	public static final int T=95;
	public static final int THEN=96;
	public static final int TOP=97;
	public static final int TRUE=98;
	public static final int Timestamp=99;
	public static final int U=100;
	public static final int UNION=101;
	public static final int UNIQUE=102;
	public static final int UPDATE=103;
	public static final int USING=104;
	public static final int V=105;
	public static final int VALUES=106;
	public static final int W=107;
	public static final int WHEN=108;
	public static final int WHERE=109;
	public static final int Whitespace=110;
	public static final int X=111;
	public static final int Y=112;
	public static final int Z=113;

	// delegates
	public Parser[] getDelegates() {
		return new Parser[] {};
	}

	// delegators


	public GeneralSQLParser(TokenStream input) {
		this(input, new RecognizerSharedState());
	}
	public GeneralSQLParser(TokenStream input, RecognizerSharedState state) {
		super(input, state);
	}

	@Override public String[] getTokenNames() { return GeneralSQLParser.tokenNames; }
	@Override public String getGrammarFileName() { return "parser\\GeneralSQL.g"; }





	// $ANTLR start "statement"
	// parser\\GeneralSQL.g:53:1: statement : ( select ( SEMI )? EOF | insert ( SEMI )? EOF | update ( SEMI )? EOF );
	public final void statement() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:54:3: ( select ( SEMI )? EOF | insert ( SEMI )? EOF | update ( SEMI )? EOF )
			int alt4=3;
			switch ( input.LA(1) ) {
			case SELECT:
				{
				alt4=1;
				}
				break;
			case INSERT:
				{
				alt4=2;
				}
				break;
			case UPDATE:
				{
				alt4=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 4, 0, input);
				throw nvae;
			}
			switch (alt4) {
				case 1 :
					// parser\\GeneralSQL.g:54:5: select ( SEMI )? EOF
					{
					pushFollow(FOLLOW_select_in_statement69);
					select();
					state._fsp--;
					if (state.failed) return;
					// parser\\GeneralSQL.g:54:12: ( SEMI )?
					int alt1=2;
					int LA1_0 = input.LA(1);
					if ( (LA1_0==SEMI) ) {
						alt1=1;
					}
					switch (alt1) {
						case 1 :
							// parser\\GeneralSQL.g:54:14: SEMI
							{
							match(input,SEMI,FOLLOW_SEMI_in_statement73); if (state.failed) return;
							}
							break;

					}

					match(input,EOF,FOLLOW_EOF_in_statement78); if (state.failed) return;
					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:55:5: insert ( SEMI )? EOF
					{
					pushFollow(FOLLOW_insert_in_statement84);
					insert();
					state._fsp--;
					if (state.failed) return;
					// parser\\GeneralSQL.g:55:12: ( SEMI )?
					int alt2=2;
					int LA2_0 = input.LA(1);
					if ( (LA2_0==SEMI) ) {
						alt2=1;
					}
					switch (alt2) {
						case 1 :
							// parser\\GeneralSQL.g:55:14: SEMI
							{
							match(input,SEMI,FOLLOW_SEMI_in_statement88); if (state.failed) return;
							}
							break;

					}

					match(input,EOF,FOLLOW_EOF_in_statement93); if (state.failed) return;
					}
					break;
				case 3 :
					// parser\\GeneralSQL.g:56:5: update ( SEMI )? EOF
					{
					pushFollow(FOLLOW_update_in_statement99);
					update();
					state._fsp--;
					if (state.failed) return;
					// parser\\GeneralSQL.g:56:12: ( SEMI )?
					int alt3=2;
					int LA3_0 = input.LA(1);
					if ( (LA3_0==SEMI) ) {
						alt3=1;
					}
					switch (alt3) {
						case 1 :
							// parser\\GeneralSQL.g:56:14: SEMI
							{
							match(input,SEMI,FOLLOW_SEMI_in_statement103); if (state.failed) return;
							}
							break;

					}

					match(input,EOF,FOLLOW_EOF_in_statement108); if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "statement"



	// $ANTLR start "subSelect"
	// parser\\GeneralSQL.g:60:1: subSelect : ( select | LPAREN select RPAREN );
	public final void subSelect() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:61:3: ( select | LPAREN select RPAREN )
			int alt5=2;
			int LA5_0 = input.LA(1);
			if ( (LA5_0==SELECT) ) {
				alt5=1;
			}
			else if ( (LA5_0==LPAREN) ) {
				alt5=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 5, 0, input);
				throw nvae;
			}

			switch (alt5) {
				case 1 :
					// parser\\GeneralSQL.g:61:5: select
					{
					pushFollow(FOLLOW_select_in_subSelect124);
					select();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:62:5: LPAREN select RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_subSelect130); if (state.failed) return;
					pushFollow(FOLLOW_select_in_subSelect132);
					select();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_subSelect134); if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "subSelect"



	// $ANTLR start "select"
	// parser\\GeneralSQL.g:65:1: select : SELECT ( ALL | DISTINCT | UNIQUE )? ( TOP Integer ( PERCENT )? )? itemList ( into )? from ( joinList )? ( where )? ( groupBy )? ( having )? ( orderBy )? ;
	public final void select() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:66:3: ( SELECT ( ALL | DISTINCT | UNIQUE )? ( TOP Integer ( PERCENT )? )? itemList ( into )? from ( joinList )? ( where )? ( groupBy )? ( having )? ( orderBy )? )
			// parser\\GeneralSQL.g:66:5: SELECT ( ALL | DISTINCT | UNIQUE )? ( TOP Integer ( PERCENT )? )? itemList ( into )? from ( joinList )? ( where )? ( groupBy )? ( having )? ( orderBy )?
			{
			match(input,SELECT,FOLLOW_SELECT_in_select149); if (state.failed) return;
			// parser\\GeneralSQL.g:67:5: ( ALL | DISTINCT | UNIQUE )?
			int alt6=2;
			int LA6_0 = input.LA(1);
			if ( (LA6_0==ALL||LA6_0==DISTINCT||LA6_0==UNIQUE) ) {
				alt6=1;
			}
			switch (alt6) {
				case 1 :
					// parser\\GeneralSQL.g:
					{
					if ( input.LA(1)==ALL||input.LA(1)==DISTINCT||input.LA(1)==UNIQUE ) {
						input.consume();
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					}
					break;

			}

			// parser\\GeneralSQL.g:68:5: ( TOP Integer ( PERCENT )? )?
			int alt8=2;
			int LA8_0 = input.LA(1);
			if ( (LA8_0==TOP) ) {
				alt8=1;
			}
			switch (alt8) {
				case 1 :
					// parser\\GeneralSQL.g:68:7: TOP Integer ( PERCENT )?
					{
					match(input,TOP,FOLLOW_TOP_in_select176); if (state.failed) return;
					match(input,Integer,FOLLOW_Integer_in_select178); if (state.failed) return;
					// parser\\GeneralSQL.g:68:19: ( PERCENT )?
					int alt7=2;
					int LA7_0 = input.LA(1);
					if ( (LA7_0==PERCENT) ) {
						alt7=1;
					}
					switch (alt7) {
						case 1 :
							// parser\\GeneralSQL.g:68:21: PERCENT
							{
							match(input,PERCENT,FOLLOW_PERCENT_in_select182); if (state.failed) return;
							}
							break;

					}

					}
					break;

			}

			pushFollow(FOLLOW_itemList_in_select194);
			itemList();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:70:5: ( into )?
			int alt9=2;
			int LA9_0 = input.LA(1);
			if ( (LA9_0==INTO) ) {
				alt9=1;
			}
			switch (alt9) {
				case 1 :
					// parser\\GeneralSQL.g:70:7: into
					{
					pushFollow(FOLLOW_into_in_select202);
					into();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_from_in_select211);
			from();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:72:5: ( joinList )?
			int alt10=2;
			switch ( input.LA(1) ) {
				case INNER:
				case JOIN:
				case LEFT:
				case NATURAL:
				case OUTER:
				case RIGHT:
					{
					alt10=1;
					}
					break;
				case WHERE:
					{
					int LA10_2 = input.LA(2);
					if ( (synpred13_GeneralSQL()) ) {
						alt10=1;
					}
					}
					break;
				case GROUP:
					{
					int LA10_3 = input.LA(2);
					if ( (synpred13_GeneralSQL()) ) {
						alt10=1;
					}
					}
					break;
				case HAVING:
					{
					int LA10_4 = input.LA(2);
					if ( (synpred13_GeneralSQL()) ) {
						alt10=1;
					}
					}
					break;
				case ORDER:
					{
					int LA10_5 = input.LA(2);
					if ( (synpred13_GeneralSQL()) ) {
						alt10=1;
					}
					}
					break;
				case SEMI:
					{
					int LA10_6 = input.LA(2);
					if ( (synpred13_GeneralSQL()) ) {
						alt10=1;
					}
					}
					break;
				case EOF:
					{
					int LA10_7 = input.LA(2);
					if ( (synpred13_GeneralSQL()) ) {
						alt10=1;
					}
					}
					break;
				case RPAREN:
					{
					int LA10_8 = input.LA(2);
					if ( (synpred13_GeneralSQL()) ) {
						alt10=1;
					}
					}
					break;
			}
			switch (alt10) {
				case 1 :
					// parser\\GeneralSQL.g:72:7: joinList
					{
					pushFollow(FOLLOW_joinList_in_select219);
					joinList();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// parser\\GeneralSQL.g:73:5: ( where )?
			int alt11=2;
			int LA11_0 = input.LA(1);
			if ( (LA11_0==WHERE) ) {
				alt11=1;
			}
			switch (alt11) {
				case 1 :
					// parser\\GeneralSQL.g:73:7: where
					{
					pushFollow(FOLLOW_where_in_select230);
					where();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// parser\\GeneralSQL.g:74:5: ( groupBy )?
			int alt12=2;
			int LA12_0 = input.LA(1);
			if ( (LA12_0==GROUP) ) {
				alt12=1;
			}
			switch (alt12) {
				case 1 :
					// parser\\GeneralSQL.g:74:7: groupBy
					{
					pushFollow(FOLLOW_groupBy_in_select241);
					groupBy();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// parser\\GeneralSQL.g:75:5: ( having )?
			int alt13=2;
			int LA13_0 = input.LA(1);
			if ( (LA13_0==HAVING) ) {
				alt13=1;
			}
			switch (alt13) {
				case 1 :
					// parser\\GeneralSQL.g:75:7: having
					{
					pushFollow(FOLLOW_having_in_select252);
					having();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// parser\\GeneralSQL.g:76:5: ( orderBy )?
			int alt14=2;
			int LA14_0 = input.LA(1);
			if ( (LA14_0==ORDER) ) {
				alt14=1;
			}
			switch (alt14) {
				case 1 :
					// parser\\GeneralSQL.g:76:7: orderBy
					{
					pushFollow(FOLLOW_orderBy_in_select263);
					orderBy();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "select"



	// $ANTLR start "insert"
	// parser\\GeneralSQL.g:79:1: insert : INSERT into ( columnList )? ( values ) ;
	public final void insert() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:80:3: ( INSERT into ( columnList )? ( values ) )
			// parser\\GeneralSQL.g:80:5: INSERT into ( columnList )? ( values )
			{
			match(input,INSERT,FOLLOW_INSERT_in_insert281); if (state.failed) return;
			pushFollow(FOLLOW_into_in_insert283);
			into();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:80:17: ( columnList )?
			int alt15=2;
			int LA15_0 = input.LA(1);
			if ( (LA15_0==LPAREN) ) {
				alt15=1;
			}
			switch (alt15) {
				case 1 :
					// parser\\GeneralSQL.g:80:19: columnList
					{
					pushFollow(FOLLOW_columnList_in_insert287);
					columnList();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// parser\\GeneralSQL.g:81:3: ( values )
			// parser\\GeneralSQL.g:81:5: values
			{
			pushFollow(FOLLOW_values_in_insert296);
			values();
			state._fsp--;
			if (state.failed) return;
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "insert"



	// $ANTLR start "update"
	// parser\\GeneralSQL.g:86:1: update : UPDATE tableRef SET setter ( COMMA setter )* ( where )? ;
	public final void update() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:87:3: ( UPDATE tableRef SET setter ( COMMA setter )* ( where )? )
			// parser\\GeneralSQL.g:87:5: UPDATE tableRef SET setter ( COMMA setter )* ( where )?
			{
			match(input,UPDATE,FOLLOW_UPDATE_in_update316); if (state.failed) return;
			pushFollow(FOLLOW_tableRef_in_update318);
			tableRef();
			state._fsp--;
			if (state.failed) return;
			match(input,SET,FOLLOW_SET_in_update320); if (state.failed) return;
			pushFollow(FOLLOW_setter_in_update322);
			setter();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:87:32: ( COMMA setter )*
			loop16:
			while (true) {
				int alt16=2;
				int LA16_0 = input.LA(1);
				if ( (LA16_0==COMMA) ) {
					alt16=1;
				}

				switch (alt16) {
				case 1 :
					// parser\\GeneralSQL.g:87:34: COMMA setter
					{
					match(input,COMMA,FOLLOW_COMMA_in_update326); if (state.failed) return;
					pushFollow(FOLLOW_setter_in_update328);
					setter();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop16;
				}
			}

			// parser\\GeneralSQL.g:88:5: ( where )?
			int alt17=2;
			int LA17_0 = input.LA(1);
			if ( (LA17_0==WHERE) ) {
				alt17=1;
			}
			switch (alt17) {
				case 1 :
					// parser\\GeneralSQL.g:88:7: where
					{
					pushFollow(FOLLOW_where_in_update339);
					where();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "update"



	// $ANTLR start "setter"
	// parser\\GeneralSQL.g:91:1: setter : columnName EQ literal ;
	public final void setter() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:92:3: ( columnName EQ literal )
			// parser\\GeneralSQL.g:92:5: columnName EQ literal
			{
			pushFollow(FOLLOW_columnName_in_setter357);
			columnName();
			state._fsp--;
			if (state.failed) return;
			match(input,EQ,FOLLOW_EQ_in_setter359); if (state.failed) return;
			pushFollow(FOLLOW_literal_in_setter361);
			literal();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "setter"



	// $ANTLR start "into"
	// parser\\GeneralSQL.g:95:1: into : INTO tableRef ( COMMA tableRef )* ;
	public final void into() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:96:3: ( INTO tableRef ( COMMA tableRef )* )
			// parser\\GeneralSQL.g:96:5: INTO tableRef ( COMMA tableRef )*
			{
			match(input,INTO,FOLLOW_INTO_in_into376); if (state.failed) return;
			pushFollow(FOLLOW_tableRef_in_into378);
			tableRef();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:96:19: ( COMMA tableRef )*
			loop18:
			while (true) {
				int alt18=2;
				int LA18_0 = input.LA(1);
				if ( (LA18_0==COMMA) ) {
					alt18=1;
				}

				switch (alt18) {
				case 1 :
					// parser\\GeneralSQL.g:96:21: COMMA tableRef
					{
					match(input,COMMA,FOLLOW_COMMA_in_into382); if (state.failed) return;
					pushFollow(FOLLOW_tableRef_in_into384);
					tableRef();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop18;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "into"



	// $ANTLR start "columnList"
	// parser\\GeneralSQL.g:99:1: columnList : LPAREN columnName ( COMMA columnName )* RPAREN ;
	public final void columnList() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:100:3: ( LPAREN columnName ( COMMA columnName )* RPAREN )
			// parser\\GeneralSQL.g:100:5: LPAREN columnName ( COMMA columnName )* RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_columnList400); if (state.failed) return;
			pushFollow(FOLLOW_columnName_in_columnList402);
			columnName();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:100:23: ( COMMA columnName )*
			loop19:
			while (true) {
				int alt19=2;
				int LA19_0 = input.LA(1);
				if ( (LA19_0==COMMA) ) {
					alt19=1;
				}

				switch (alt19) {
				case 1 :
					// parser\\GeneralSQL.g:100:25: COMMA columnName
					{
					match(input,COMMA,FOLLOW_COMMA_in_columnList406); if (state.failed) return;
					pushFollow(FOLLOW_columnName_in_columnList408);
					columnName();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop19;
				}
			}

			match(input,RPAREN,FOLLOW_RPAREN_in_columnList413); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "columnList"



	// $ANTLR start "values"
	// parser\\GeneralSQL.g:103:1: values : VALUES LPAREN literal ( COMMA literal )* RPAREN ;
	public final void values() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:104:3: ( VALUES LPAREN literal ( COMMA literal )* RPAREN )
			// parser\\GeneralSQL.g:104:5: VALUES LPAREN literal ( COMMA literal )* RPAREN
			{
			match(input,VALUES,FOLLOW_VALUES_in_values428); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_values430); if (state.failed) return;
			pushFollow(FOLLOW_literal_in_values432);
			literal();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:104:27: ( COMMA literal )*
			loop20:
			while (true) {
				int alt20=2;
				int LA20_0 = input.LA(1);
				if ( (LA20_0==COMMA) ) {
					alt20=1;
				}

				switch (alt20) {
				case 1 :
					// parser\\GeneralSQL.g:104:29: COMMA literal
					{
					match(input,COMMA,FOLLOW_COMMA_in_values436); if (state.failed) return;
					pushFollow(FOLLOW_literal_in_values438);
					literal();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop20;
				}
			}

			match(input,RPAREN,FOLLOW_RPAREN_in_values443); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "values"



	// $ANTLR start "itemList"
	// parser\\GeneralSQL.g:107:1: itemList : ( STAR | item ( COMMA item )* );
	public final void itemList() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:108:3: ( STAR | item ( COMMA item )* )
			int alt22=2;
			int LA22_0 = input.LA(1);
			if ( (LA22_0==STAR) ) {
				alt22=1;
			}
			else if ( (LA22_0==COUNT||LA22_0==FALSE||LA22_0==Float||(LA22_0 >= Identifier && LA22_0 <= Integer)||LA22_0==LPAREN||(LA22_0 >= MAX && LA22_0 <= MINUS)||LA22_0==PLUS||LA22_0==QuotedIdentifier||LA22_0==String||LA22_0==TRUE||(LA22_0 >= 114 && LA22_0 <= 116)) ) {
				alt22=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 22, 0, input);
				throw nvae;
			}

			switch (alt22) {
				case 1 :
					// parser\\GeneralSQL.g:108:5: STAR
					{
					match(input,STAR,FOLLOW_STAR_in_itemList458); if (state.failed) return;
					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:109:5: item ( COMMA item )*
					{
					pushFollow(FOLLOW_item_in_itemList464);
					item();
					state._fsp--;
					if (state.failed) return;
					// parser\\GeneralSQL.g:109:10: ( COMMA item )*
					loop21:
					while (true) {
						int alt21=2;
						int LA21_0 = input.LA(1);
						if ( (LA21_0==COMMA) ) {
							alt21=1;
						}

						switch (alt21) {
						case 1 :
							// parser\\GeneralSQL.g:109:12: COMMA item
							{
							match(input,COMMA,FOLLOW_COMMA_in_itemList468); if (state.failed) return;
							pushFollow(FOLLOW_item_in_itemList470);
							item();
							state._fsp--;
							if (state.failed) return;
							}
							break;

						default :
							break loop21;
						}
					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "itemList"



	// $ANTLR start "item"
	// parser\\GeneralSQL.g:112:1: item : ( value ( ( AS )? alias )? | allColumns | function ( ( AS )? alias )? );
	public final void item() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:113:3: ( value ( ( AS )? alias )? | allColumns | function ( ( AS )? alias )? )
			int alt27=3;
			switch ( input.LA(1) ) {
			case FALSE:
			case Float:
			case Integer:
			case LPAREN:
			case MINUS:
			case PLUS:
			case QuotedIdentifier:
			case String:
			case TRUE:
			case 114:
			case 115:
			case 116:
				{
				alt27=1;
				}
				break;
			case Identifier:
				{
				int LA27_2 = input.LA(2);
				if ( (LA27_2==EOF||LA27_2==AS||LA27_2==COMMA||LA27_2==FROM||LA27_2==INTO||LA27_2==Identifier) ) {
					alt27=1;
				}
				else if ( (LA27_2==DOT) ) {
					int LA27_4 = input.LA(3);
					if ( (LA27_4==STAR) ) {
						alt27=2;
					}
					else if ( (LA27_4==Identifier||LA27_4==QuotedIdentifier) ) {
						alt27=1;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 27, 4, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 27, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case COUNT:
			case MAX:
			case MIN:
				{
				alt27=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 27, 0, input);
				throw nvae;
			}
			switch (alt27) {
				case 1 :
					// parser\\GeneralSQL.g:113:5: value ( ( AS )? alias )?
					{
					pushFollow(FOLLOW_value_in_item488);
					value();
					state._fsp--;
					if (state.failed) return;
					// parser\\GeneralSQL.g:113:11: ( ( AS )? alias )?
					int alt24=2;
					int LA24_0 = input.LA(1);
					if ( (LA24_0==AS||LA24_0==Identifier) ) {
						alt24=1;
					}
					switch (alt24) {
						case 1 :
							// parser\\GeneralSQL.g:113:13: ( AS )? alias
							{
							// parser\\GeneralSQL.g:113:13: ( AS )?
							int alt23=2;
							int LA23_0 = input.LA(1);
							if ( (LA23_0==AS) ) {
								alt23=1;
							}
							switch (alt23) {
								case 1 :
									// parser\\GeneralSQL.g:113:15: AS
									{
									match(input,AS,FOLLOW_AS_in_item494); if (state.failed) return;
									}
									break;

							}

							pushFollow(FOLLOW_alias_in_item499);
							alias();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:114:5: allColumns
					{
					pushFollow(FOLLOW_allColumns_in_item508);
					allColumns();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// parser\\GeneralSQL.g:115:5: function ( ( AS )? alias )?
					{
					pushFollow(FOLLOW_function_in_item514);
					function();
					state._fsp--;
					if (state.failed) return;
					// parser\\GeneralSQL.g:115:14: ( ( AS )? alias )?
					int alt26=2;
					int LA26_0 = input.LA(1);
					if ( (LA26_0==AS||LA26_0==Identifier) ) {
						alt26=1;
					}
					switch (alt26) {
						case 1 :
							// parser\\GeneralSQL.g:115:16: ( AS )? alias
							{
							// parser\\GeneralSQL.g:115:16: ( AS )?
							int alt25=2;
							int LA25_0 = input.LA(1);
							if ( (LA25_0==AS) ) {
								alt25=1;
							}
							switch (alt25) {
								case 1 :
									// parser\\GeneralSQL.g:115:16: AS
									{
									match(input,AS,FOLLOW_AS_in_item518); if (state.failed) return;
									}
									break;

							}

							pushFollow(FOLLOW_alias_in_item521);
							alias();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "item"



	// $ANTLR start "allColumns"
	// parser\\GeneralSQL.g:118:1: allColumns : tableAlias DOT STAR ;
	public final void allColumns() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:119:3: ( tableAlias DOT STAR )
			// parser\\GeneralSQL.g:119:5: tableAlias DOT STAR
			{
			pushFollow(FOLLOW_tableAlias_in_allColumns538);
			tableAlias();
			state._fsp--;
			if (state.failed) return;
			match(input,DOT,FOLLOW_DOT_in_allColumns540); if (state.failed) return;
			match(input,STAR,FOLLOW_STAR_in_allColumns542); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allColumns"



	// $ANTLR start "alias"
	// parser\\GeneralSQL.g:122:1: alias : Identifier ;
	public final void alias() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:123:3: ( Identifier )
			// parser\\GeneralSQL.g:123:5: Identifier
			{
			match(input,Identifier,FOLLOW_Identifier_in_alias555); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "alias"



	// $ANTLR start "function"
	// parser\\GeneralSQL.g:126:1: function : functionName LPAREN ( value ( COMMA value )* )? RPAREN ;
	public final void function() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:127:3: ( functionName LPAREN ( value ( COMMA value )* )? RPAREN )
			// parser\\GeneralSQL.g:127:5: functionName LPAREN ( value ( COMMA value )* )? RPAREN
			{
			pushFollow(FOLLOW_functionName_in_function570);
			functionName();
			state._fsp--;
			if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_function572); if (state.failed) return;
			// parser\\GeneralSQL.g:127:25: ( value ( COMMA value )* )?
			int alt29=2;
			int LA29_0 = input.LA(1);
			if ( (LA29_0==FALSE||LA29_0==Float||(LA29_0 >= Identifier && LA29_0 <= Integer)||LA29_0==LPAREN||LA29_0==MINUS||LA29_0==PLUS||LA29_0==QuotedIdentifier||LA29_0==String||LA29_0==TRUE||(LA29_0 >= 114 && LA29_0 <= 116)) ) {
				alt29=1;
			}
			switch (alt29) {
				case 1 :
					// parser\\GeneralSQL.g:127:27: value ( COMMA value )*
					{
					pushFollow(FOLLOW_value_in_function576);
					value();
					state._fsp--;
					if (state.failed) return;
					// parser\\GeneralSQL.g:127:33: ( COMMA value )*
					loop28:
					while (true) {
						int alt28=2;
						int LA28_0 = input.LA(1);
						if ( (LA28_0==COMMA) ) {
							alt28=1;
						}

						switch (alt28) {
						case 1 :
							// parser\\GeneralSQL.g:127:35: COMMA value
							{
							match(input,COMMA,FOLLOW_COMMA_in_function580); if (state.failed) return;
							pushFollow(FOLLOW_value_in_function582);
							value();
							state._fsp--;
							if (state.failed) return;
							}
							break;

						default :
							break loop28;
						}
					}

					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_function590); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "function"



	// $ANTLR start "functionName"
	// parser\\GeneralSQL.g:130:1: functionName : ( COUNT | MIN | MAX );
	public final void functionName() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:131:3: ( COUNT | MIN | MAX )
			// parser\\GeneralSQL.g:
			{
			if ( input.LA(1)==COUNT||(input.LA(1) >= MAX && input.LA(1) <= MIN) ) {
				input.consume();
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "functionName"



	// $ANTLR start "from"
	// parser\\GeneralSQL.g:136:1: from : FROM fromItem ( COMMA fromItem )* ;
	public final void from() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:137:3: ( FROM fromItem ( COMMA fromItem )* )
			// parser\\GeneralSQL.g:137:5: FROM fromItem ( COMMA fromItem )*
			{
			match(input,FROM,FOLLOW_FROM_in_from632); if (state.failed) return;
			pushFollow(FOLLOW_fromItem_in_from634);
			fromItem();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:137:19: ( COMMA fromItem )*
			loop30:
			while (true) {
				int alt30=2;
				int LA30_0 = input.LA(1);
				if ( (LA30_0==COMMA) ) {
					alt30=1;
				}

				switch (alt30) {
				case 1 :
					// parser\\GeneralSQL.g:137:21: COMMA fromItem
					{
					match(input,COMMA,FOLLOW_COMMA_in_from638); if (state.failed) return;
					pushFollow(FOLLOW_fromItem_in_from640);
					fromItem();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop30;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "from"



	// $ANTLR start "fromItem"
	// parser\\GeneralSQL.g:140:1: fromItem : ( ( LPAREN subSelect RPAREN ) | tableRef ) ( ( AS )? alias )? ;
	public final void fromItem() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:141:3: ( ( ( LPAREN subSelect RPAREN ) | tableRef ) ( ( AS )? alias )? )
			// parser\\GeneralSQL.g:141:5: ( ( LPAREN subSelect RPAREN ) | tableRef ) ( ( AS )? alias )?
			{
			// parser\\GeneralSQL.g:141:5: ( ( LPAREN subSelect RPAREN ) | tableRef )
			int alt31=2;
			int LA31_0 = input.LA(1);
			if ( (LA31_0==LPAREN) ) {
				alt31=1;
			}
			else if ( (LA31_0==Identifier||LA31_0==QuotedIdentifier) ) {
				alt31=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 31, 0, input);
				throw nvae;
			}

			switch (alt31) {
				case 1 :
					// parser\\GeneralSQL.g:141:7: ( LPAREN subSelect RPAREN )
					{
					// parser\\GeneralSQL.g:141:7: ( LPAREN subSelect RPAREN )
					// parser\\GeneralSQL.g:141:9: LPAREN subSelect RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_fromItem662); if (state.failed) return;
					pushFollow(FOLLOW_subSelect_in_fromItem664);
					subSelect();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_fromItem666); if (state.failed) return;
					}

					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:142:7: tableRef
					{
					pushFollow(FOLLOW_tableRef_in_fromItem677);
					tableRef();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// parser\\GeneralSQL.g:144:5: ( ( AS )? alias )?
			int alt33=2;
			int LA33_0 = input.LA(1);
			if ( (LA33_0==AS||LA33_0==Identifier) ) {
				alt33=1;
			}
			switch (alt33) {
				case 1 :
					// parser\\GeneralSQL.g:144:7: ( AS )? alias
					{
					// parser\\GeneralSQL.g:144:7: ( AS )?
					int alt32=2;
					int LA32_0 = input.LA(1);
					if ( (LA32_0==AS) ) {
						alt32=1;
					}
					switch (alt32) {
						case 1 :
							// parser\\GeneralSQL.g:144:9: AS
							{
							match(input,AS,FOLLOW_AS_in_fromItem694); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_alias_in_fromItem699);
					alias();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "fromItem"



	// $ANTLR start "joinList"
	// parser\\GeneralSQL.g:147:1: joinList : ( join )* ;
	public final void joinList() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:148:3: ( ( join )* )
			// parser\\GeneralSQL.g:148:5: ( join )*
			{
			// parser\\GeneralSQL.g:148:5: ( join )*
			loop34:
			while (true) {
				int alt34=2;
				int LA34_0 = input.LA(1);
				if ( (LA34_0==INNER||LA34_0==JOIN||LA34_0==LEFT||LA34_0==NATURAL||LA34_0==OUTER||LA34_0==RIGHT) ) {
					alt34=1;
				}

				switch (alt34) {
				case 1 :
					// parser\\GeneralSQL.g:148:7: join
					{
					pushFollow(FOLLOW_join_in_joinList717);
					join();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop34;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "joinList"



	// $ANTLR start "join"
	// parser\\GeneralSQL.g:151:1: join : ( JOIN | INNER JOIN | LEFT JOIN | LEFT OUTER JOIN | RIGHT JOIN | RIGHT OUTER JOIN | OUTER JOIN | NATURAL JOIN ) fromItem ( ON conditionList | USING LPAREN columnRef ( COMMA columnRef )* RPAREN )? ;
	public final void join() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:152:3: ( ( JOIN | INNER JOIN | LEFT JOIN | LEFT OUTER JOIN | RIGHT JOIN | RIGHT OUTER JOIN | OUTER JOIN | NATURAL JOIN ) fromItem ( ON conditionList | USING LPAREN columnRef ( COMMA columnRef )* RPAREN )? )
			// parser\\GeneralSQL.g:153:5: ( JOIN | INNER JOIN | LEFT JOIN | LEFT OUTER JOIN | RIGHT JOIN | RIGHT OUTER JOIN | OUTER JOIN | NATURAL JOIN ) fromItem ( ON conditionList | USING LPAREN columnRef ( COMMA columnRef )* RPAREN )?
			{
			// parser\\GeneralSQL.g:153:5: ( JOIN | INNER JOIN | LEFT JOIN | LEFT OUTER JOIN | RIGHT JOIN | RIGHT OUTER JOIN | OUTER JOIN | NATURAL JOIN )
			int alt35=8;
			switch ( input.LA(1) ) {
			case JOIN:
				{
				alt35=1;
				}
				break;
			case INNER:
				{
				alt35=2;
				}
				break;
			case LEFT:
				{
				int LA35_3 = input.LA(2);
				if ( (LA35_3==JOIN) ) {
					alt35=3;
				}
				else if ( (LA35_3==OUTER) ) {
					alt35=4;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 35, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case RIGHT:
				{
				int LA35_4 = input.LA(2);
				if ( (LA35_4==JOIN) ) {
					alt35=5;
				}
				else if ( (LA35_4==OUTER) ) {
					alt35=6;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 35, 4, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case OUTER:
				{
				alt35=7;
				}
				break;
			case NATURAL:
				{
				alt35=8;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 35, 0, input);
				throw nvae;
			}
			switch (alt35) {
				case 1 :
					// parser\\GeneralSQL.g:153:7: JOIN
					{
					match(input,JOIN,FOLLOW_JOIN_in_join742); if (state.failed) return;
					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:154:7: INNER JOIN
					{
					match(input,INNER,FOLLOW_INNER_in_join750); if (state.failed) return;
					match(input,JOIN,FOLLOW_JOIN_in_join752); if (state.failed) return;
					}
					break;
				case 3 :
					// parser\\GeneralSQL.g:155:7: LEFT JOIN
					{
					match(input,LEFT,FOLLOW_LEFT_in_join760); if (state.failed) return;
					match(input,JOIN,FOLLOW_JOIN_in_join762); if (state.failed) return;
					}
					break;
				case 4 :
					// parser\\GeneralSQL.g:156:7: LEFT OUTER JOIN
					{
					match(input,LEFT,FOLLOW_LEFT_in_join770); if (state.failed) return;
					match(input,OUTER,FOLLOW_OUTER_in_join772); if (state.failed) return;
					match(input,JOIN,FOLLOW_JOIN_in_join774); if (state.failed) return;
					}
					break;
				case 5 :
					// parser\\GeneralSQL.g:157:7: RIGHT JOIN
					{
					match(input,RIGHT,FOLLOW_RIGHT_in_join782); if (state.failed) return;
					match(input,JOIN,FOLLOW_JOIN_in_join784); if (state.failed) return;
					}
					break;
				case 6 :
					// parser\\GeneralSQL.g:158:7: RIGHT OUTER JOIN
					{
					match(input,RIGHT,FOLLOW_RIGHT_in_join793); if (state.failed) return;
					match(input,OUTER,FOLLOW_OUTER_in_join795); if (state.failed) return;
					match(input,JOIN,FOLLOW_JOIN_in_join797); if (state.failed) return;
					}
					break;
				case 7 :
					// parser\\GeneralSQL.g:159:7: OUTER JOIN
					{
					match(input,OUTER,FOLLOW_OUTER_in_join805); if (state.failed) return;
					match(input,JOIN,FOLLOW_JOIN_in_join807); if (state.failed) return;
					}
					break;
				case 8 :
					// parser\\GeneralSQL.g:160:7: NATURAL JOIN
					{
					match(input,NATURAL,FOLLOW_NATURAL_in_join816); if (state.failed) return;
					match(input,JOIN,FOLLOW_JOIN_in_join818); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_fromItem_in_join829);
			fromItem();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:163:3: ( ON conditionList | USING LPAREN columnRef ( COMMA columnRef )* RPAREN )?
			int alt37=3;
			int LA37_0 = input.LA(1);
			if ( (LA37_0==ON) ) {
				alt37=1;
			}
			else if ( (LA37_0==USING) ) {
				alt37=2;
			}
			switch (alt37) {
				case 1 :
					// parser\\GeneralSQL.g:163:5: ON conditionList
					{
					match(input,ON,FOLLOW_ON_in_join835); if (state.failed) return;
					pushFollow(FOLLOW_conditionList_in_join837);
					conditionList();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:164:5: USING LPAREN columnRef ( COMMA columnRef )* RPAREN
					{
					match(input,USING,FOLLOW_USING_in_join843); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_join845); if (state.failed) return;
					pushFollow(FOLLOW_columnRef_in_join847);
					columnRef();
					state._fsp--;
					if (state.failed) return;
					// parser\\GeneralSQL.g:164:28: ( COMMA columnRef )*
					loop36:
					while (true) {
						int alt36=2;
						int LA36_0 = input.LA(1);
						if ( (LA36_0==COMMA) ) {
							alt36=1;
						}

						switch (alt36) {
						case 1 :
							// parser\\GeneralSQL.g:164:30: COMMA columnRef
							{
							match(input,COMMA,FOLLOW_COMMA_in_join851); if (state.failed) return;
							pushFollow(FOLLOW_columnRef_in_join853);
							columnRef();
							state._fsp--;
							if (state.failed) return;
							}
							break;

						default :
							break loop36;
						}
					}

					match(input,RPAREN,FOLLOW_RPAREN_in_join858); if (state.failed) return;
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "join"



	// $ANTLR start "where"
	// parser\\GeneralSQL.g:174:1: where : WHERE conditionList ;
	public final void where() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:175:3: ( WHERE conditionList )
			// parser\\GeneralSQL.g:175:5: WHERE conditionList
			{
			match(input,WHERE,FOLLOW_WHERE_in_where884); if (state.failed) return;
			pushFollow(FOLLOW_conditionList_in_where886);
			conditionList();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "where"



	// $ANTLR start "groupBy"
	// parser\\GeneralSQL.g:178:1: groupBy : GROUP BY columnRef ( COMMA columnRef )* ;
	public final void groupBy() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:179:3: ( GROUP BY columnRef ( COMMA columnRef )* )
			// parser\\GeneralSQL.g:179:5: GROUP BY columnRef ( COMMA columnRef )*
			{
			match(input,GROUP,FOLLOW_GROUP_in_groupBy901); if (state.failed) return;
			match(input,BY,FOLLOW_BY_in_groupBy903); if (state.failed) return;
			pushFollow(FOLLOW_columnRef_in_groupBy905);
			columnRef();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:179:24: ( COMMA columnRef )*
			loop38:
			while (true) {
				int alt38=2;
				int LA38_0 = input.LA(1);
				if ( (LA38_0==COMMA) ) {
					alt38=1;
				}

				switch (alt38) {
				case 1 :
					// parser\\GeneralSQL.g:179:26: COMMA columnRef
					{
					match(input,COMMA,FOLLOW_COMMA_in_groupBy909); if (state.failed) return;
					pushFollow(FOLLOW_columnRef_in_groupBy911);
					columnRef();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop38;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "groupBy"



	// $ANTLR start "having"
	// parser\\GeneralSQL.g:182:1: having : HAVING conditionList ;
	public final void having() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:183:3: ( HAVING conditionList )
			// parser\\GeneralSQL.g:183:5: HAVING conditionList
			{
			match(input,HAVING,FOLLOW_HAVING_in_having929); if (state.failed) return;
			pushFollow(FOLLOW_conditionList_in_having931);
			conditionList();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "having"



	// $ANTLR start "orderBy"
	// parser\\GeneralSQL.g:186:1: orderBy : ORDER BY orderByItem ( COMMA orderByItem )* ;
	public final void orderBy() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:187:3: ( ORDER BY orderByItem ( COMMA orderByItem )* )
			// parser\\GeneralSQL.g:187:5: ORDER BY orderByItem ( COMMA orderByItem )*
			{
			match(input,ORDER,FOLLOW_ORDER_in_orderBy946); if (state.failed) return;
			match(input,BY,FOLLOW_BY_in_orderBy948); if (state.failed) return;
			pushFollow(FOLLOW_orderByItem_in_orderBy950);
			orderByItem();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:187:26: ( COMMA orderByItem )*
			loop39:
			while (true) {
				int alt39=2;
				int LA39_0 = input.LA(1);
				if ( (LA39_0==COMMA) ) {
					alt39=1;
				}

				switch (alt39) {
				case 1 :
					// parser\\GeneralSQL.g:187:28: COMMA orderByItem
					{
					match(input,COMMA,FOLLOW_COMMA_in_orderBy954); if (state.failed) return;
					pushFollow(FOLLOW_orderByItem_in_orderBy956);
					orderByItem();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop39;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "orderBy"



	// $ANTLR start "orderByItem"
	// parser\\GeneralSQL.g:190:1: orderByItem : columnRef ( ASC | DESC )? ;
	public final void orderByItem() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:191:3: ( columnRef ( ASC | DESC )? )
			// parser\\GeneralSQL.g:191:5: columnRef ( ASC | DESC )?
			{
			pushFollow(FOLLOW_columnRef_in_orderByItem974);
			columnRef();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:191:15: ( ASC | DESC )?
			int alt40=2;
			int LA40_0 = input.LA(1);
			if ( (LA40_0==ASC||LA40_0==DESC) ) {
				alt40=1;
			}
			switch (alt40) {
				case 1 :
					// parser\\GeneralSQL.g:
					{
					if ( input.LA(1)==ASC||input.LA(1)==DESC ) {
						input.consume();
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "orderByItem"



	// $ANTLR start "nestedCondition"
	// parser\\GeneralSQL.g:194:1: nestedCondition : LPAREN conditionList RPAREN ;
	public final void nestedCondition() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:195:3: ( LPAREN conditionList RPAREN )
			// parser\\GeneralSQL.g:195:5: LPAREN conditionList RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_nestedCondition1000); if (state.failed) return;
			pushFollow(FOLLOW_conditionList_in_nestedCondition1002);
			conditionList();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_nestedCondition1004); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "nestedCondition"



	// $ANTLR start "conditionList"
	// parser\\GeneralSQL.g:198:1: conditionList : condition ( ( OR | AND ) condition )* ;
	public final void conditionList() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:199:3: ( condition ( ( OR | AND ) condition )* )
			// parser\\GeneralSQL.g:199:5: condition ( ( OR | AND ) condition )*
			{
			pushFollow(FOLLOW_condition_in_conditionList1019);
			condition();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:199:15: ( ( OR | AND ) condition )*
			loop41:
			while (true) {
				int alt41=2;
				int LA41_0 = input.LA(1);
				if ( (LA41_0==AND||LA41_0==OR) ) {
					alt41=1;
				}

				switch (alt41) {
				case 1 :
					// parser\\GeneralSQL.g:199:17: ( OR | AND ) condition
					{
					if ( input.LA(1)==AND||input.LA(1)==OR ) {
						input.consume();
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_condition_in_conditionList1033);
					condition();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop41;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "conditionList"



	// $ANTLR start "condition"
	// parser\\GeneralSQL.g:202:1: condition : ( NOT )? ( nestedCondition | in | between | isNull | exists | like | quantifier | comparison ) ;
	public final void condition() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:203:3: ( ( NOT )? ( nestedCondition | in | between | isNull | exists | like | quantifier | comparison ) )
			// parser\\GeneralSQL.g:203:5: ( NOT )? ( nestedCondition | in | between | isNull | exists | like | quantifier | comparison )
			{
			// parser\\GeneralSQL.g:203:5: ( NOT )?
			int alt42=2;
			int LA42_0 = input.LA(1);
			if ( (LA42_0==NOT) ) {
				alt42=1;
			}
			switch (alt42) {
				case 1 :
					// parser\\GeneralSQL.g:203:7: NOT
					{
					match(input,NOT,FOLLOW_NOT_in_condition1053); if (state.failed) return;
					}
					break;

			}

			// parser\\GeneralSQL.g:204:5: ( nestedCondition | in | between | isNull | exists | like | quantifier | comparison )
			int alt43=8;
			switch ( input.LA(1) ) {
			case LPAREN:
				{
				int LA43_1 = input.LA(2);
				if ( (synpred58_GeneralSQL()) ) {
					alt43=1;
				}
				else if ( (synpred59_GeneralSQL()) ) {
					alt43=2;
				}
				else if ( (synpred60_GeneralSQL()) ) {
					alt43=3;
				}
				else if ( (synpred61_GeneralSQL()) ) {
					alt43=4;
				}
				else if ( (synpred63_GeneralSQL()) ) {
					alt43=6;
				}
				else if ( (synpred64_GeneralSQL()) ) {
					alt43=7;
				}
				else if ( (true) ) {
					alt43=8;
				}

				}
				break;
			case MINUS:
			case PLUS:
				{
				int LA43_2 = input.LA(2);
				if ( (synpred59_GeneralSQL()) ) {
					alt43=2;
				}
				else if ( (synpred60_GeneralSQL()) ) {
					alt43=3;
				}
				else if ( (synpred61_GeneralSQL()) ) {
					alt43=4;
				}
				else if ( (synpred63_GeneralSQL()) ) {
					alt43=6;
				}
				else if ( (synpred64_GeneralSQL()) ) {
					alt43=7;
				}
				else if ( (true) ) {
					alt43=8;
				}

				}
				break;
			case Float:
				{
				int LA43_3 = input.LA(2);
				if ( (synpred59_GeneralSQL()) ) {
					alt43=2;
				}
				else if ( (synpred60_GeneralSQL()) ) {
					alt43=3;
				}
				else if ( (synpred61_GeneralSQL()) ) {
					alt43=4;
				}
				else if ( (synpred63_GeneralSQL()) ) {
					alt43=6;
				}
				else if ( (synpred64_GeneralSQL()) ) {
					alt43=7;
				}
				else if ( (true) ) {
					alt43=8;
				}

				}
				break;
			case Integer:
				{
				int LA43_4 = input.LA(2);
				if ( (synpred59_GeneralSQL()) ) {
					alt43=2;
				}
				else if ( (synpred60_GeneralSQL()) ) {
					alt43=3;
				}
				else if ( (synpred61_GeneralSQL()) ) {
					alt43=4;
				}
				else if ( (synpred63_GeneralSQL()) ) {
					alt43=6;
				}
				else if ( (synpred64_GeneralSQL()) ) {
					alt43=7;
				}
				else if ( (true) ) {
					alt43=8;
				}

				}
				break;
			case String:
				{
				int LA43_5 = input.LA(2);
				if ( (synpred59_GeneralSQL()) ) {
					alt43=2;
				}
				else if ( (synpred60_GeneralSQL()) ) {
					alt43=3;
				}
				else if ( (synpred61_GeneralSQL()) ) {
					alt43=4;
				}
				else if ( (synpred63_GeneralSQL()) ) {
					alt43=6;
				}
				else if ( (synpred64_GeneralSQL()) ) {
					alt43=7;
				}
				else if ( (true) ) {
					alt43=8;
				}

				}
				break;
			case TRUE:
				{
				int LA43_6 = input.LA(2);
				if ( (synpred59_GeneralSQL()) ) {
					alt43=2;
				}
				else if ( (synpred60_GeneralSQL()) ) {
					alt43=3;
				}
				else if ( (synpred61_GeneralSQL()) ) {
					alt43=4;
				}
				else if ( (synpred63_GeneralSQL()) ) {
					alt43=6;
				}
				else if ( (synpred64_GeneralSQL()) ) {
					alt43=7;
				}
				else if ( (true) ) {
					alt43=8;
				}

				}
				break;
			case FALSE:
				{
				int LA43_7 = input.LA(2);
				if ( (synpred59_GeneralSQL()) ) {
					alt43=2;
				}
				else if ( (synpred60_GeneralSQL()) ) {
					alt43=3;
				}
				else if ( (synpred61_GeneralSQL()) ) {
					alt43=4;
				}
				else if ( (synpred63_GeneralSQL()) ) {
					alt43=6;
				}
				else if ( (synpred64_GeneralSQL()) ) {
					alt43=7;
				}
				else if ( (true) ) {
					alt43=8;
				}

				}
				break;
			case 114:
				{
				int LA43_8 = input.LA(2);
				if ( (synpred59_GeneralSQL()) ) {
					alt43=2;
				}
				else if ( (synpred60_GeneralSQL()) ) {
					alt43=3;
				}
				else if ( (synpred61_GeneralSQL()) ) {
					alt43=4;
				}
				else if ( (synpred63_GeneralSQL()) ) {
					alt43=6;
				}
				else if ( (synpred64_GeneralSQL()) ) {
					alt43=7;
				}
				else if ( (true) ) {
					alt43=8;
				}

				}
				break;
			case 115:
				{
				int LA43_9 = input.LA(2);
				if ( (synpred59_GeneralSQL()) ) {
					alt43=2;
				}
				else if ( (synpred60_GeneralSQL()) ) {
					alt43=3;
				}
				else if ( (synpred61_GeneralSQL()) ) {
					alt43=4;
				}
				else if ( (synpred63_GeneralSQL()) ) {
					alt43=6;
				}
				else if ( (synpred64_GeneralSQL()) ) {
					alt43=7;
				}
				else if ( (true) ) {
					alt43=8;
				}

				}
				break;
			case 116:
				{
				int LA43_10 = input.LA(2);
				if ( (synpred59_GeneralSQL()) ) {
					alt43=2;
				}
				else if ( (synpred60_GeneralSQL()) ) {
					alt43=3;
				}
				else if ( (synpred61_GeneralSQL()) ) {
					alt43=4;
				}
				else if ( (synpred63_GeneralSQL()) ) {
					alt43=6;
				}
				else if ( (synpred64_GeneralSQL()) ) {
					alt43=7;
				}
				else if ( (true) ) {
					alt43=8;
				}

				}
				break;
			case Identifier:
				{
				int LA43_11 = input.LA(2);
				if ( (synpred59_GeneralSQL()) ) {
					alt43=2;
				}
				else if ( (synpred60_GeneralSQL()) ) {
					alt43=3;
				}
				else if ( (synpred61_GeneralSQL()) ) {
					alt43=4;
				}
				else if ( (synpred63_GeneralSQL()) ) {
					alt43=6;
				}
				else if ( (synpred64_GeneralSQL()) ) {
					alt43=7;
				}
				else if ( (true) ) {
					alt43=8;
				}

				}
				break;
			case QuotedIdentifier:
				{
				int LA43_12 = input.LA(2);
				if ( (synpred59_GeneralSQL()) ) {
					alt43=2;
				}
				else if ( (synpred60_GeneralSQL()) ) {
					alt43=3;
				}
				else if ( (synpred61_GeneralSQL()) ) {
					alt43=4;
				}
				else if ( (synpred63_GeneralSQL()) ) {
					alt43=6;
				}
				else if ( (synpred64_GeneralSQL()) ) {
					alt43=7;
				}
				else if ( (true) ) {
					alt43=8;
				}

				}
				break;
			case EXISTS:
				{
				alt43=5;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 43, 0, input);
				throw nvae;
			}
			switch (alt43) {
				case 1 :
					// parser\\GeneralSQL.g:204:7: nestedCondition
					{
					pushFollow(FOLLOW_nestedCondition_in_condition1064);
					nestedCondition();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:205:7: in
					{
					pushFollow(FOLLOW_in_in_condition1072);
					in();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// parser\\GeneralSQL.g:206:7: between
					{
					pushFollow(FOLLOW_between_in_condition1080);
					between();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// parser\\GeneralSQL.g:207:7: isNull
					{
					pushFollow(FOLLOW_isNull_in_condition1088);
					isNull();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// parser\\GeneralSQL.g:208:7: exists
					{
					pushFollow(FOLLOW_exists_in_condition1096);
					exists();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 6 :
					// parser\\GeneralSQL.g:209:7: like
					{
					pushFollow(FOLLOW_like_in_condition1104);
					like();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 7 :
					// parser\\GeneralSQL.g:210:7: quantifier
					{
					pushFollow(FOLLOW_quantifier_in_condition1112);
					quantifier();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 8 :
					// parser\\GeneralSQL.g:211:7: comparison
					{
					pushFollow(FOLLOW_comparison_in_condition1120);
					comparison();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "condition"



	// $ANTLR start "in"
	// parser\\GeneralSQL.g:215:1: in : expression ( NOT )? IN LPAREN ( subSelect | expressionList ) RPAREN ;
	public final void in() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:216:3: ( expression ( NOT )? IN LPAREN ( subSelect | expressionList ) RPAREN )
			// parser\\GeneralSQL.g:216:5: expression ( NOT )? IN LPAREN ( subSelect | expressionList ) RPAREN
			{
			pushFollow(FOLLOW_expression_in_in1139);
			expression();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:216:16: ( NOT )?
			int alt44=2;
			int LA44_0 = input.LA(1);
			if ( (LA44_0==NOT) ) {
				alt44=1;
			}
			switch (alt44) {
				case 1 :
					// parser\\GeneralSQL.g:216:18: NOT
					{
					match(input,NOT,FOLLOW_NOT_in_in1143); if (state.failed) return;
					}
					break;

			}

			match(input,IN,FOLLOW_IN_in_in1148); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_in1150); if (state.failed) return;
			// parser\\GeneralSQL.g:216:35: ( subSelect | expressionList )
			int alt45=2;
			switch ( input.LA(1) ) {
			case SELECT:
				{
				alt45=1;
				}
				break;
			case LPAREN:
				{
				int LA45_2 = input.LA(2);
				if ( (LA45_2==SELECT) ) {
					alt45=1;
				}
				else if ( (LA45_2==FALSE||LA45_2==Float||(LA45_2 >= Identifier && LA45_2 <= Integer)||LA45_2==LPAREN||LA45_2==MINUS||LA45_2==PLUS||LA45_2==QuotedIdentifier||LA45_2==String||LA45_2==TRUE||(LA45_2 >= 114 && LA45_2 <= 116)) ) {
					alt45=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 45, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case FALSE:
			case Float:
			case Identifier:
			case Integer:
			case MINUS:
			case PLUS:
			case QuotedIdentifier:
			case String:
			case TRUE:
			case 114:
			case 115:
			case 116:
				{
				alt45=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 45, 0, input);
				throw nvae;
			}
			switch (alt45) {
				case 1 :
					// parser\\GeneralSQL.g:216:37: subSelect
					{
					pushFollow(FOLLOW_subSelect_in_in1154);
					subSelect();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:216:49: expressionList
					{
					pushFollow(FOLLOW_expressionList_in_in1158);
					expressionList();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_in1162); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "in"



	// $ANTLR start "between"
	// parser\\GeneralSQL.g:219:1: between : expression ( NOT )? BETWEEN expression AND expression ;
	public final void between() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:220:3: ( expression ( NOT )? BETWEEN expression AND expression )
			// parser\\GeneralSQL.g:220:5: expression ( NOT )? BETWEEN expression AND expression
			{
			pushFollow(FOLLOW_expression_in_between1177);
			expression();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:220:16: ( NOT )?
			int alt46=2;
			int LA46_0 = input.LA(1);
			if ( (LA46_0==NOT) ) {
				alt46=1;
			}
			switch (alt46) {
				case 1 :
					// parser\\GeneralSQL.g:220:18: NOT
					{
					match(input,NOT,FOLLOW_NOT_in_between1181); if (state.failed) return;
					}
					break;

			}

			match(input,BETWEEN,FOLLOW_BETWEEN_in_between1186); if (state.failed) return;
			pushFollow(FOLLOW_expression_in_between1188);
			expression();
			state._fsp--;
			if (state.failed) return;
			match(input,AND,FOLLOW_AND_in_between1190); if (state.failed) return;
			pushFollow(FOLLOW_expression_in_between1192);
			expression();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "between"



	// $ANTLR start "isNull"
	// parser\\GeneralSQL.g:223:1: isNull : expression IS ( NOT )? NULL ;
	public final void isNull() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:224:3: ( expression IS ( NOT )? NULL )
			// parser\\GeneralSQL.g:224:5: expression IS ( NOT )? NULL
			{
			pushFollow(FOLLOW_expression_in_isNull1207);
			expression();
			state._fsp--;
			if (state.failed) return;
			match(input,IS,FOLLOW_IS_in_isNull1209); if (state.failed) return;
			// parser\\GeneralSQL.g:224:19: ( NOT )?
			int alt47=2;
			int LA47_0 = input.LA(1);
			if ( (LA47_0==NOT) ) {
				alt47=1;
			}
			switch (alt47) {
				case 1 :
					// parser\\GeneralSQL.g:224:21: NOT
					{
					match(input,NOT,FOLLOW_NOT_in_isNull1213); if (state.failed) return;
					}
					break;

			}

			match(input,NULL,FOLLOW_NULL_in_isNull1218); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "isNull"



	// $ANTLR start "exists"
	// parser\\GeneralSQL.g:227:1: exists : EXISTS expression ;
	public final void exists() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:228:3: ( EXISTS expression )
			// parser\\GeneralSQL.g:228:5: EXISTS expression
			{
			match(input,EXISTS,FOLLOW_EXISTS_in_exists1233); if (state.failed) return;
			pushFollow(FOLLOW_expression_in_exists1235);
			expression();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "exists"



	// $ANTLR start "like"
	// parser\\GeneralSQL.g:231:1: like : expression ( NOT )? LIKE expression ;
	public final void like() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:234:3: ( expression ( NOT )? LIKE expression )
			// parser\\GeneralSQL.g:234:5: expression ( NOT )? LIKE expression
			{
			pushFollow(FOLLOW_expression_in_like1254);
			expression();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:234:16: ( NOT )?
			int alt48=2;
			int LA48_0 = input.LA(1);
			if ( (LA48_0==NOT) ) {
				alt48=1;
			}
			switch (alt48) {
				case 1 :
					// parser\\GeneralSQL.g:234:18: NOT
					{
					match(input,NOT,FOLLOW_NOT_in_like1258); if (state.failed) return;
					}
					break;

			}

			match(input,LIKE,FOLLOW_LIKE_in_like1263); if (state.failed) return;
			pushFollow(FOLLOW_expression_in_like1265);
			expression();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "like"



	// $ANTLR start "comparison"
	// parser\\GeneralSQL.g:238:1: comparison : expression comparator expression ;
	public final void comparison() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:239:3: ( expression comparator expression )
			// parser\\GeneralSQL.g:239:5: expression comparator expression
			{
			pushFollow(FOLLOW_expression_in_comparison1283);
			expression();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_comparator_in_comparison1285);
			comparator();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_expression_in_comparison1287);
			expression();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "comparison"



	// $ANTLR start "comparator"
	// parser\\GeneralSQL.g:242:1: comparator : ( EQ | NEQ1 | NEQ2 | LTE | LT | GTE | GT );
	public final void comparator() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:243:3: ( EQ | NEQ1 | NEQ2 | LTE | LT | GTE | GT )
			// parser\\GeneralSQL.g:
			{
			if ( input.LA(1)==EQ||(input.LA(1) >= GT && input.LA(1) <= GTE)||(input.LA(1) >= LT && input.LA(1) <= LTE)||(input.LA(1) >= NEQ1 && input.LA(1) <= NEQ2) ) {
				input.consume();
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "comparator"



	// $ANTLR start "quantifier"
	// parser\\GeneralSQL.g:252:1: quantifier : expression ( ALL | ANY | SOME ) LPAREN subSelect RPAREN ;
	public final void quantifier() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:253:3: ( expression ( ALL | ANY | SOME ) LPAREN subSelect RPAREN )
			// parser\\GeneralSQL.g:253:5: expression ( ALL | ANY | SOME ) LPAREN subSelect RPAREN
			{
			pushFollow(FOLLOW_expression_in_quantifier1352);
			expression();
			state._fsp--;
			if (state.failed) return;
			if ( input.LA(1)==ALL||input.LA(1)==ANY||input.LA(1)==SOME ) {
				input.consume();
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			match(input,LPAREN,FOLLOW_LPAREN_in_quantifier1368); if (state.failed) return;
			pushFollow(FOLLOW_subSelect_in_quantifier1370);
			subSelect();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_quantifier1372); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "quantifier"



	// $ANTLR start "expressionList"
	// parser\\GeneralSQL.g:256:1: expressionList : expression ( COMMA expression )* ;
	public final void expressionList() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:257:3: ( expression ( COMMA expression )* )
			// parser\\GeneralSQL.g:257:5: expression ( COMMA expression )*
			{
			pushFollow(FOLLOW_expression_in_expressionList1387);
			expression();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:257:16: ( COMMA expression )*
			loop49:
			while (true) {
				int alt49=2;
				int LA49_0 = input.LA(1);
				if ( (LA49_0==COMMA) ) {
					alt49=1;
				}

				switch (alt49) {
				case 1 :
					// parser\\GeneralSQL.g:257:18: COMMA expression
					{
					match(input,COMMA,FOLLOW_COMMA_in_expressionList1391); if (state.failed) return;
					pushFollow(FOLLOW_expression_in_expressionList1393);
					expression();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop49;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "expressionList"



	// $ANTLR start "nestedExpression"
	// parser\\GeneralSQL.g:260:1: nestedExpression : LPAREN expression RPAREN ;
	public final void nestedExpression() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:261:3: ( LPAREN expression RPAREN )
			// parser\\GeneralSQL.g:261:5: LPAREN expression RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_nestedExpression1409); if (state.failed) return;
			pushFollow(FOLLOW_expression_in_nestedExpression1411);
			expression();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_nestedExpression1413); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "nestedExpression"



	// $ANTLR start "expression"
	// parser\\GeneralSQL.g:264:1: expression : multiply ( ( PLUS | MINUS ) multiply )* ;
	public final void expression() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:265:3: ( multiply ( ( PLUS | MINUS ) multiply )* )
			// parser\\GeneralSQL.g:265:5: multiply ( ( PLUS | MINUS ) multiply )*
			{
			pushFollow(FOLLOW_multiply_in_expression1428);
			multiply();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:265:14: ( ( PLUS | MINUS ) multiply )*
			loop50:
			while (true) {
				int alt50=2;
				int LA50_0 = input.LA(1);
				if ( (LA50_0==MINUS||LA50_0==PLUS) ) {
					alt50=1;
				}

				switch (alt50) {
				case 1 :
					// parser\\GeneralSQL.g:265:16: ( PLUS | MINUS ) multiply
					{
					if ( input.LA(1)==MINUS||input.LA(1)==PLUS ) {
						input.consume();
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_multiply_in_expression1442);
					multiply();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop50;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "expression"



	// $ANTLR start "multiply"
	// parser\\GeneralSQL.g:268:1: multiply : value ( ( STAR | DIVIDE ) value )* ;
	public final void multiply() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:269:3: ( value ( ( STAR | DIVIDE ) value )* )
			// parser\\GeneralSQL.g:269:5: value ( ( STAR | DIVIDE ) value )*
			{
			pushFollow(FOLLOW_value_in_multiply1459);
			value();
			state._fsp--;
			if (state.failed) return;
			// parser\\GeneralSQL.g:269:11: ( ( STAR | DIVIDE ) value )*
			loop51:
			while (true) {
				int alt51=2;
				int LA51_0 = input.LA(1);
				if ( (LA51_0==DIVIDE||LA51_0==STAR) ) {
					alt51=1;
				}

				switch (alt51) {
				case 1 :
					// parser\\GeneralSQL.g:269:13: ( STAR | DIVIDE ) value
					{
					if ( input.LA(1)==DIVIDE||input.LA(1)==STAR ) {
						input.consume();
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_value_in_multiply1473);
					value();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop51;
				}
			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "multiply"



	// $ANTLR start "value"
	// parser\\GeneralSQL.g:287:1: value : ( literal | ( unary )? ( columnRef | nestedExpression ) );
	public final void value() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:288:3: ( literal | ( unary )? ( columnRef | nestedExpression ) )
			int alt54=2;
			switch ( input.LA(1) ) {
			case MINUS:
			case PLUS:
				{
				int LA54_1 = input.LA(2);
				if ( (LA54_1==Float||LA54_1==Integer) ) {
					alt54=1;
				}
				else if ( (LA54_1==Identifier||LA54_1==LPAREN||LA54_1==QuotedIdentifier) ) {
					alt54=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 54, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case FALSE:
			case Float:
			case Integer:
			case String:
			case TRUE:
			case 114:
			case 115:
			case 116:
				{
				alt54=1;
				}
				break;
			case Identifier:
			case LPAREN:
			case QuotedIdentifier:
				{
				alt54=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 54, 0, input);
				throw nvae;
			}
			switch (alt54) {
				case 1 :
					// parser\\GeneralSQL.g:288:5: literal
					{
					pushFollow(FOLLOW_literal_in_value1512);
					literal();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:290:5: ( unary )? ( columnRef | nestedExpression )
					{
					// parser\\GeneralSQL.g:290:5: ( unary )?
					int alt52=2;
					int LA52_0 = input.LA(1);
					if ( (LA52_0==MINUS||LA52_0==PLUS) ) {
						alt52=1;
					}
					switch (alt52) {
						case 1 :
							// parser\\GeneralSQL.g:290:7: unary
							{
							pushFollow(FOLLOW_unary_in_value1522);
							unary();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					// parser\\GeneralSQL.g:291:5: ( columnRef | nestedExpression )
					int alt53=2;
					int LA53_0 = input.LA(1);
					if ( (LA53_0==Identifier||LA53_0==QuotedIdentifier) ) {
						alt53=1;
					}
					else if ( (LA53_0==LPAREN) ) {
						alt53=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						NoViableAltException nvae =
							new NoViableAltException("", 53, 0, input);
						throw nvae;
					}

					switch (alt53) {
						case 1 :
							// parser\\GeneralSQL.g:291:7: columnRef
							{
							pushFollow(FOLLOW_columnRef_in_value1533);
							columnRef();
							state._fsp--;
							if (state.failed) return;
							}
							break;
						case 2 :
							// parser\\GeneralSQL.g:292:7: nestedExpression
							{
							pushFollow(FOLLOW_nestedExpression_in_value1541);
							nestedExpression();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "value"



	// $ANTLR start "literal"
	// parser\\GeneralSQL.g:297:1: literal : ( ( unary )? Float | ( unary )? Integer | String | TRUE | FALSE | date );
	public final void literal() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:298:3: ( ( unary )? Float | ( unary )? Integer | String | TRUE | FALSE | date )
			int alt57=6;
			switch ( input.LA(1) ) {
			case MINUS:
			case PLUS:
				{
				int LA57_1 = input.LA(2);
				if ( (LA57_1==Float) ) {
					alt57=1;
				}
				else if ( (LA57_1==Integer) ) {
					alt57=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 57, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case Float:
				{
				alt57=1;
				}
				break;
			case Integer:
				{
				alt57=2;
				}
				break;
			case String:
				{
				alt57=3;
				}
				break;
			case TRUE:
				{
				alt57=4;
				}
				break;
			case FALSE:
				{
				alt57=5;
				}
				break;
			case 114:
			case 115:
			case 116:
				{
				alt57=6;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 57, 0, input);
				throw nvae;
			}
			switch (alt57) {
				case 1 :
					// parser\\GeneralSQL.g:298:5: ( unary )? Float
					{
					// parser\\GeneralSQL.g:298:5: ( unary )?
					int alt55=2;
					int LA55_0 = input.LA(1);
					if ( (LA55_0==MINUS||LA55_0==PLUS) ) {
						alt55=1;
					}
					switch (alt55) {
						case 1 :
							// parser\\GeneralSQL.g:298:7: unary
							{
							pushFollow(FOLLOW_unary_in_literal1565);
							unary();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,Float,FOLLOW_Float_in_literal1570); if (state.failed) return;
					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:299:5: ( unary )? Integer
					{
					// parser\\GeneralSQL.g:299:5: ( unary )?
					int alt56=2;
					int LA56_0 = input.LA(1);
					if ( (LA56_0==MINUS||LA56_0==PLUS) ) {
						alt56=1;
					}
					switch (alt56) {
						case 1 :
							// parser\\GeneralSQL.g:299:7: unary
							{
							pushFollow(FOLLOW_unary_in_literal1578);
							unary();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,Integer,FOLLOW_Integer_in_literal1583); if (state.failed) return;
					}
					break;
				case 3 :
					// parser\\GeneralSQL.g:300:5: String
					{
					match(input,String,FOLLOW_String_in_literal1589); if (state.failed) return;
					}
					break;
				case 4 :
					// parser\\GeneralSQL.g:301:5: TRUE
					{
					match(input,TRUE,FOLLOW_TRUE_in_literal1595); if (state.failed) return;
					}
					break;
				case 5 :
					// parser\\GeneralSQL.g:302:5: FALSE
					{
					match(input,FALSE,FOLLOW_FALSE_in_literal1601); if (state.failed) return;
					}
					break;
				case 6 :
					// parser\\GeneralSQL.g:303:5: date
					{
					pushFollow(FOLLOW_date_in_literal1607);
					date();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "literal"



	// $ANTLR start "date"
	// parser\\GeneralSQL.g:306:1: date : ( '{d' Timestamp '}' | '{t' Timestamp '}' | '{ts' Timestamp '}' );
	public final void date() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:307:3: ( '{d' Timestamp '}' | '{t' Timestamp '}' | '{ts' Timestamp '}' )
			int alt58=3;
			switch ( input.LA(1) ) {
			case 114:
				{
				alt58=1;
				}
				break;
			case 115:
				{
				alt58=2;
				}
				break;
			case 116:
				{
				alt58=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 58, 0, input);
				throw nvae;
			}
			switch (alt58) {
				case 1 :
					// parser\\GeneralSQL.g:307:5: '{d' Timestamp '}'
					{
					match(input,114,FOLLOW_114_in_date1620); if (state.failed) return;
					match(input,Timestamp,FOLLOW_Timestamp_in_date1622); if (state.failed) return;
					match(input,RCURLY,FOLLOW_RCURLY_in_date1624); if (state.failed) return;
					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:308:5: '{t' Timestamp '}'
					{
					match(input,115,FOLLOW_115_in_date1631); if (state.failed) return;
					match(input,Timestamp,FOLLOW_Timestamp_in_date1633); if (state.failed) return;
					match(input,RCURLY,FOLLOW_RCURLY_in_date1635); if (state.failed) return;
					}
					break;
				case 3 :
					// parser\\GeneralSQL.g:309:5: '{ts' Timestamp '}'
					{
					match(input,116,FOLLOW_116_in_date1642); if (state.failed) return;
					match(input,Timestamp,FOLLOW_Timestamp_in_date1644); if (state.failed) return;
					match(input,RCURLY,FOLLOW_RCURLY_in_date1646); if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "date"



	// $ANTLR start "unary"
	// parser\\GeneralSQL.g:312:1: unary : ( MINUS | PLUS );
	public final void unary() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:313:3: ( MINUS | PLUS )
			// parser\\GeneralSQL.g:
			{
			if ( input.LA(1)==MINUS||input.LA(1)==PLUS ) {
				input.consume();
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "unary"



	// $ANTLR start "tableRef"
	// parser\\GeneralSQL.g:334:1: tableRef : ( tableName | databaseName DOT tableName );
	public final void tableRef() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:335:3: ( tableName | databaseName DOT tableName )
			int alt59=2;
			int LA59_0 = input.LA(1);
			if ( (LA59_0==Identifier||LA59_0==QuotedIdentifier) ) {
				int LA59_1 = input.LA(2);
				if ( (LA59_1==EOF||LA59_1==AS||LA59_1==COMMA||LA59_1==FROM||LA59_1==GROUP||LA59_1==HAVING||LA59_1==INNER||LA59_1==Identifier||LA59_1==JOIN||LA59_1==LEFT||LA59_1==LPAREN||LA59_1==NATURAL||LA59_1==ON||(LA59_1 >= ORDER && LA59_1 <= OUTER)||(LA59_1 >= RIGHT && LA59_1 <= RPAREN)||(LA59_1 >= SEMI && LA59_1 <= SET)||LA59_1==USING||LA59_1==VALUES||LA59_1==WHERE) ) {
					alt59=1;
				}
				else if ( (LA59_1==DOT) ) {
					alt59=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 59, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 59, 0, input);
				throw nvae;
			}

			switch (alt59) {
				case 1 :
					// parser\\GeneralSQL.g:335:5: tableName
					{
					pushFollow(FOLLOW_tableName_in_tableRef1701);
					tableName();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:336:5: databaseName DOT tableName
					{
					pushFollow(FOLLOW_databaseName_in_tableRef1707);
					databaseName();
					state._fsp--;
					if (state.failed) return;
					match(input,DOT,FOLLOW_DOT_in_tableRef1709); if (state.failed) return;
					pushFollow(FOLLOW_tableName_in_tableRef1711);
					tableName();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "tableRef"



	// $ANTLR start "columnRef"
	// parser\\GeneralSQL.g:339:1: columnRef : ( columnName | tableAlias DOT columnName );
	public final void columnRef() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:340:3: ( columnName | tableAlias DOT columnName )
			int alt60=2;
			int LA60_0 = input.LA(1);
			if ( (LA60_0==Identifier) ) {
				int LA60_1 = input.LA(2);
				if ( (LA60_1==EOF||(LA60_1 >= ALL && LA60_1 <= ASC)||LA60_1==BETWEEN||LA60_1==COMMA||LA60_1==DESC||LA60_1==DIVIDE||LA60_1==EQ||LA60_1==FROM||(LA60_1 >= GROUP && LA60_1 <= GTE)||LA60_1==HAVING||(LA60_1 >= IN && LA60_1 <= INNER)||(LA60_1 >= INTO && LA60_1 <= Identifier)||LA60_1==JOIN||(LA60_1 >= LEFT && LA60_1 <= LIKE)||(LA60_1 >= LT && LA60_1 <= LTE)||LA60_1==MINUS||(LA60_1 >= NATURAL && LA60_1 <= NOT)||(LA60_1 >= OR && LA60_1 <= OUTER)||LA60_1==PLUS||(LA60_1 >= RIGHT && LA60_1 <= RPAREN)||LA60_1==SEMI||(LA60_1 >= SOME && LA60_1 <= STAR)||LA60_1==WHERE) ) {
					alt60=1;
				}
				else if ( (LA60_1==DOT) ) {
					alt60=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 60, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA60_0==QuotedIdentifier) ) {
				alt60=1;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 60, 0, input);
				throw nvae;
			}

			switch (alt60) {
				case 1 :
					// parser\\GeneralSQL.g:340:5: columnName
					{
					pushFollow(FOLLOW_columnName_in_columnRef1726);
					columnName();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// parser\\GeneralSQL.g:341:5: tableAlias DOT columnName
					{
					pushFollow(FOLLOW_tableAlias_in_columnRef1733);
					tableAlias();
					state._fsp--;
					if (state.failed) return;
					match(input,DOT,FOLLOW_DOT_in_columnRef1735); if (state.failed) return;
					pushFollow(FOLLOW_columnName_in_columnRef1737);
					columnName();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "columnRef"



	// $ANTLR start "databaseName"
	// parser\\GeneralSQL.g:344:1: databaseName : ( Identifier | QuotedIdentifier );
	public final void databaseName() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:345:3: ( Identifier | QuotedIdentifier )
			// parser\\GeneralSQL.g:
			{
			if ( input.LA(1)==Identifier||input.LA(1)==QuotedIdentifier ) {
				input.consume();
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "databaseName"



	// $ANTLR start "tableName"
	// parser\\GeneralSQL.g:349:1: tableName : ( Identifier | QuotedIdentifier );
	public final void tableName() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:350:3: ( Identifier | QuotedIdentifier )
			// parser\\GeneralSQL.g:
			{
			if ( input.LA(1)==Identifier||input.LA(1)==QuotedIdentifier ) {
				input.consume();
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "tableName"



	// $ANTLR start "tableAlias"
	// parser\\GeneralSQL.g:354:1: tableAlias : Identifier ;
	public final void tableAlias() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:355:3: ( Identifier )
			// parser\\GeneralSQL.g:355:5: Identifier
			{
			match(input,Identifier,FOLLOW_Identifier_in_tableAlias1792); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "tableAlias"



	// $ANTLR start "columnName"
	// parser\\GeneralSQL.g:358:1: columnName : ( Identifier | QuotedIdentifier );
	public final void columnName() throws RecognitionException {
		try {
			// parser\\GeneralSQL.g:359:3: ( Identifier | QuotedIdentifier )
			// parser\\GeneralSQL.g:
			{
			if ( input.LA(1)==Identifier||input.LA(1)==QuotedIdentifier ) {
				input.consume();
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "columnName"

	// $ANTLR start synpred13_GeneralSQL
	public final void synpred13_GeneralSQL_fragment() throws RecognitionException {
		// parser\\GeneralSQL.g:72:7: ( joinList )
		// parser\\GeneralSQL.g:72:7: joinList
		{
		pushFollow(FOLLOW_joinList_in_synpred13_GeneralSQL219);
		joinList();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred13_GeneralSQL

	// $ANTLR start synpred58_GeneralSQL
	public final void synpred58_GeneralSQL_fragment() throws RecognitionException {
		// parser\\GeneralSQL.g:204:7: ( nestedCondition )
		// parser\\GeneralSQL.g:204:7: nestedCondition
		{
		pushFollow(FOLLOW_nestedCondition_in_synpred58_GeneralSQL1064);
		nestedCondition();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred58_GeneralSQL

	// $ANTLR start synpred59_GeneralSQL
	public final void synpred59_GeneralSQL_fragment() throws RecognitionException {
		// parser\\GeneralSQL.g:205:7: ( in )
		// parser\\GeneralSQL.g:205:7: in
		{
		pushFollow(FOLLOW_in_in_synpred59_GeneralSQL1072);
		in();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred59_GeneralSQL

	// $ANTLR start synpred60_GeneralSQL
	public final void synpred60_GeneralSQL_fragment() throws RecognitionException {
		// parser\\GeneralSQL.g:206:7: ( between )
		// parser\\GeneralSQL.g:206:7: between
		{
		pushFollow(FOLLOW_between_in_synpred60_GeneralSQL1080);
		between();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred60_GeneralSQL

	// $ANTLR start synpred61_GeneralSQL
	public final void synpred61_GeneralSQL_fragment() throws RecognitionException {
		// parser\\GeneralSQL.g:207:7: ( isNull )
		// parser\\GeneralSQL.g:207:7: isNull
		{
		pushFollow(FOLLOW_isNull_in_synpred61_GeneralSQL1088);
		isNull();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred61_GeneralSQL

	// $ANTLR start synpred63_GeneralSQL
	public final void synpred63_GeneralSQL_fragment() throws RecognitionException {
		// parser\\GeneralSQL.g:209:7: ( like )
		// parser\\GeneralSQL.g:209:7: like
		{
		pushFollow(FOLLOW_like_in_synpred63_GeneralSQL1104);
		like();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred63_GeneralSQL

	// $ANTLR start synpred64_GeneralSQL
	public final void synpred64_GeneralSQL_fragment() throws RecognitionException {
		// parser\\GeneralSQL.g:210:7: ( quantifier )
		// parser\\GeneralSQL.g:210:7: quantifier
		{
		pushFollow(FOLLOW_quantifier_in_synpred64_GeneralSQL1112);
		quantifier();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred64_GeneralSQL

	// Delegated rules

	public final boolean synpred13_GeneralSQL() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred13_GeneralSQL_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred64_GeneralSQL() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred64_GeneralSQL_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred58_GeneralSQL() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred58_GeneralSQL_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred61_GeneralSQL() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred61_GeneralSQL_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred60_GeneralSQL() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred60_GeneralSQL_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred63_GeneralSQL() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred63_GeneralSQL_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred59_GeneralSQL() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred59_GeneralSQL_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}



	public static final BitSet FOLLOW_select_in_statement69 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_SEMI_in_statement73 = new BitSet(new long[]{0x0000000000000000L});
	public static final BitSet FOLLOW_EOF_in_statement78 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_insert_in_statement84 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_SEMI_in_statement88 = new BitSet(new long[]{0x0000000000000000L});
	public static final BitSet FOLLOW_EOF_in_statement93 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_update_in_statement99 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_SEMI_in_statement103 = new BitSet(new long[]{0x0000000000000000L});
	public static final BitSet FOLLOW_EOF_in_statement108 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_select_in_subSelect124 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_subSelect130 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
	public static final BitSet FOLLOW_select_in_subSelect132 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_RPAREN_in_subSelect134 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SELECT_in_select149 = new BitSet(new long[]{0xC406001200420020L,0x001C004650048001L});
	public static final BitSet FOLLOW_TOP_in_select176 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_Integer_in_select178 = new BitSet(new long[]{0xC406001200020000L,0x001C00045004C001L});
	public static final BitSet FOLLOW_PERCENT_in_select182 = new BitSet(new long[]{0xC406001200020000L,0x001C000450048001L});
	public static final BitSet FOLLOW_itemList_in_select194 = new BitSet(new long[]{0x0000800400000000L});
	public static final BitSet FOLLOW_into_in_select202 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_from_in_select211 = new BitSet(new long[]{0x0110244000000000L,0x0000200000201808L});
	public static final BitSet FOLLOW_joinList_in_select219 = new BitSet(new long[]{0x0000044000000002L,0x0000200000000800L});
	public static final BitSet FOLLOW_where_in_select230 = new BitSet(new long[]{0x0000044000000002L,0x0000000000000800L});
	public static final BitSet FOLLOW_groupBy_in_select241 = new BitSet(new long[]{0x0000040000000002L,0x0000000000000800L});
	public static final BitSet FOLLOW_having_in_select252 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000800L});
	public static final BitSet FOLLOW_orderBy_in_select263 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INSERT_in_insert281 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_into_in_insert283 = new BitSet(new long[]{0x0400000000000000L,0x0000040000000000L});
	public static final BitSet FOLLOW_columnList_in_insert287 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000000L});
	public static final BitSet FOLLOW_values_in_insert296 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_UPDATE_in_update316 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_tableRef_in_update318 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_SET_in_update320 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_setter_in_update322 = new BitSet(new long[]{0x0000000000010002L,0x0000200000000000L});
	public static final BitSet FOLLOW_COMMA_in_update326 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_setter_in_update328 = new BitSet(new long[]{0x0000000000010002L,0x0000200000000000L});
	public static final BitSet FOLLOW_where_in_update339 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_columnName_in_setter357 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_EQ_in_setter359 = new BitSet(new long[]{0x0004001200000000L,0x001C000440008001L});
	public static final BitSet FOLLOW_literal_in_setter361 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INTO_in_into376 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_tableRef_in_into378 = new BitSet(new long[]{0x0000000000010002L});
	public static final BitSet FOLLOW_COMMA_in_into382 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_tableRef_in_into384 = new BitSet(new long[]{0x0000000000010002L});
	public static final BitSet FOLLOW_LPAREN_in_columnList400 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_columnName_in_columnList402 = new BitSet(new long[]{0x0000000000010000L,0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_columnList406 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_columnName_in_columnList408 = new BitSet(new long[]{0x0000000000010000L,0x0000000000400000L});
	public static final BitSet FOLLOW_RPAREN_in_columnList413 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VALUES_in_values428 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_values430 = new BitSet(new long[]{0x0004001200000000L,0x001C000440008001L});
	public static final BitSet FOLLOW_literal_in_values432 = new BitSet(new long[]{0x0000000000010000L,0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_values436 = new BitSet(new long[]{0x0004001200000000L,0x001C000440008001L});
	public static final BitSet FOLLOW_literal_in_values438 = new BitSet(new long[]{0x0000000000010000L,0x0000000000400000L});
	public static final BitSet FOLLOW_RPAREN_in_values443 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAR_in_itemList458 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_item_in_itemList464 = new BitSet(new long[]{0x0000000000010002L});
	public static final BitSet FOLLOW_COMMA_in_itemList468 = new BitSet(new long[]{0xC406001200020000L,0x001C000440048001L});
	public static final BitSet FOLLOW_item_in_itemList470 = new BitSet(new long[]{0x0000000000010002L});
	public static final BitSet FOLLOW_value_in_item488 = new BitSet(new long[]{0x0002000000000102L});
	public static final BitSet FOLLOW_AS_in_item494 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_alias_in_item499 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_allColumns_in_item508 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_function_in_item514 = new BitSet(new long[]{0x0002000000000102L});
	public static final BitSet FOLLOW_AS_in_item518 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_alias_in_item521 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_tableAlias_in_allColumns538 = new BitSet(new long[]{0x0000000001000000L});
	public static final BitSet FOLLOW_DOT_in_allColumns540 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
	public static final BitSet FOLLOW_STAR_in_allColumns542 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_alias555 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionName_in_function570 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_function572 = new BitSet(new long[]{0x0406001200000000L,0x001C000440448001L});
	public static final BitSet FOLLOW_value_in_function576 = new BitSet(new long[]{0x0000000000010000L,0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_function580 = new BitSet(new long[]{0x0406001200000000L,0x001C000440048001L});
	public static final BitSet FOLLOW_value_in_function582 = new BitSet(new long[]{0x0000000000010000L,0x0000000000400000L});
	public static final BitSet FOLLOW_RPAREN_in_function590 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FROM_in_from632 = new BitSet(new long[]{0x0402000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_fromItem_in_from634 = new BitSet(new long[]{0x0000000000010002L});
	public static final BitSet FOLLOW_COMMA_in_from638 = new BitSet(new long[]{0x0402000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_fromItem_in_from640 = new BitSet(new long[]{0x0000000000010002L});
	public static final BitSet FOLLOW_LPAREN_in_fromItem662 = new BitSet(new long[]{0x0400000000000000L,0x0000000001000000L});
	public static final BitSet FOLLOW_subSelect_in_fromItem664 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_RPAREN_in_fromItem666 = new BitSet(new long[]{0x0002000000000102L});
	public static final BitSet FOLLOW_tableRef_in_fromItem677 = new BitSet(new long[]{0x0002000000000102L});
	public static final BitSet FOLLOW_AS_in_fromItem694 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_alias_in_fromItem699 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_join_in_joinList717 = new BitSet(new long[]{0x0110200000000002L,0x0000000000201008L});
	public static final BitSet FOLLOW_JOIN_in_join742 = new BitSet(new long[]{0x0402000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_INNER_in_join750 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_JOIN_in_join752 = new BitSet(new long[]{0x0402000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LEFT_in_join760 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_JOIN_in_join762 = new BitSet(new long[]{0x0402000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_LEFT_in_join770 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
	public static final BitSet FOLLOW_OUTER_in_join772 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_JOIN_in_join774 = new BitSet(new long[]{0x0402000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_RIGHT_in_join782 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_JOIN_in_join784 = new BitSet(new long[]{0x0402000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_RIGHT_in_join793 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
	public static final BitSet FOLLOW_OUTER_in_join795 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_JOIN_in_join797 = new BitSet(new long[]{0x0402000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_OUTER_in_join805 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_JOIN_in_join807 = new BitSet(new long[]{0x0402000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_NATURAL_in_join816 = new BitSet(new long[]{0x0010000000000000L});
	public static final BitSet FOLLOW_JOIN_in_join818 = new BitSet(new long[]{0x0402000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_fromItem_in_join829 = new BitSet(new long[]{0x0000000000000002L,0x0000010000000200L});
	public static final BitSet FOLLOW_ON_in_join835 = new BitSet(new long[]{0x0406001240000000L,0x001C000440048041L});
	public static final BitSet FOLLOW_conditionList_in_join837 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_USING_in_join843 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_join845 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_columnRef_in_join847 = new BitSet(new long[]{0x0000000000010000L,0x0000000000400000L});
	public static final BitSet FOLLOW_COMMA_in_join851 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_columnRef_in_join853 = new BitSet(new long[]{0x0000000000010000L,0x0000000000400000L});
	public static final BitSet FOLLOW_RPAREN_in_join858 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_WHERE_in_where884 = new BitSet(new long[]{0x0406001240000000L,0x001C000440048041L});
	public static final BitSet FOLLOW_conditionList_in_where886 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GROUP_in_groupBy901 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_BY_in_groupBy903 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_columnRef_in_groupBy905 = new BitSet(new long[]{0x0000000000010002L});
	public static final BitSet FOLLOW_COMMA_in_groupBy909 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_columnRef_in_groupBy911 = new BitSet(new long[]{0x0000000000010002L});
	public static final BitSet FOLLOW_HAVING_in_having929 = new BitSet(new long[]{0x0406001240000000L,0x001C000440048041L});
	public static final BitSet FOLLOW_conditionList_in_having931 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ORDER_in_orderBy946 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_BY_in_orderBy948 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_orderByItem_in_orderBy950 = new BitSet(new long[]{0x0000000000010002L});
	public static final BitSet FOLLOW_COMMA_in_orderBy954 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_orderByItem_in_orderBy956 = new BitSet(new long[]{0x0000000000010002L});
	public static final BitSet FOLLOW_columnRef_in_orderByItem974 = new BitSet(new long[]{0x0000000000200202L});
	public static final BitSet FOLLOW_LPAREN_in_nestedCondition1000 = new BitSet(new long[]{0x0406001240000000L,0x001C000440048041L});
	public static final BitSet FOLLOW_conditionList_in_nestedCondition1002 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_RPAREN_in_nestedCondition1004 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_condition_in_conditionList1019 = new BitSet(new long[]{0x0000000000000042L,0x0000000000000400L});
	public static final BitSet FOLLOW_set_in_conditionList1023 = new BitSet(new long[]{0x0406001240000000L,0x001C000440048041L});
	public static final BitSet FOLLOW_condition_in_conditionList1033 = new BitSet(new long[]{0x0000000000000042L,0x0000000000000400L});
	public static final BitSet FOLLOW_NOT_in_condition1053 = new BitSet(new long[]{0x0406001240000000L,0x001C000440048001L});
	public static final BitSet FOLLOW_nestedCondition_in_condition1064 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_in_in_condition1072 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_between_in_condition1080 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_isNull_in_condition1088 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_exists_in_condition1096 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_like_in_condition1104 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifier_in_condition1112 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_comparison_in_condition1120 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_in1139 = new BitSet(new long[]{0x0000100000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_NOT_in_in1143 = new BitSet(new long[]{0x0000100000000000L});
	public static final BitSet FOLLOW_IN_in_in1148 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_in1150 = new BitSet(new long[]{0x0406001200000000L,0x001C000441048001L});
	public static final BitSet FOLLOW_subSelect_in_in1154 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_expressionList_in_in1158 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_RPAREN_in_in1162 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_between1177 = new BitSet(new long[]{0x0000000000000800L,0x0000000000000040L});
	public static final BitSet FOLLOW_NOT_in_between1181 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_BETWEEN_in_between1186 = new BitSet(new long[]{0x0406001200000000L,0x001C000440048001L});
	public static final BitSet FOLLOW_expression_in_between1188 = new BitSet(new long[]{0x0000000000000040L});
	public static final BitSet FOLLOW_AND_in_between1190 = new BitSet(new long[]{0x0406001200000000L,0x001C000440048001L});
	public static final BitSet FOLLOW_expression_in_between1192 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_isNull1207 = new BitSet(new long[]{0x0001000000000000L});
	public static final BitSet FOLLOW_IS_in_isNull1209 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L});
	public static final BitSet FOLLOW_NOT_in_isNull1213 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_NULL_in_isNull1218 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EXISTS_in_exists1233 = new BitSet(new long[]{0x0406001200000000L,0x001C000440048001L});
	public static final BitSet FOLLOW_expression_in_exists1235 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_like1254 = new BitSet(new long[]{0x0200000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_NOT_in_like1258 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_LIKE_in_like1263 = new BitSet(new long[]{0x0406001200000000L,0x001C000440048001L});
	public static final BitSet FOLLOW_expression_in_like1265 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_comparison1283 = new BitSet(new long[]{0x1800018020000000L,0x0000000000000030L});
	public static final BitSet FOLLOW_comparator_in_comparison1285 = new BitSet(new long[]{0x0406001200000000L,0x001C000440048001L});
	public static final BitSet FOLLOW_expression_in_comparison1287 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_quantifier1352 = new BitSet(new long[]{0x00000000000000A0L,0x0000000008000000L});
	public static final BitSet FOLLOW_set_in_quantifier1354 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_quantifier1368 = new BitSet(new long[]{0x0400000000000000L,0x0000000001000000L});
	public static final BitSet FOLLOW_subSelect_in_quantifier1370 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_RPAREN_in_quantifier1372 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_expressionList1387 = new BitSet(new long[]{0x0000000000010002L});
	public static final BitSet FOLLOW_COMMA_in_expressionList1391 = new BitSet(new long[]{0x0406001200000000L,0x001C000440048001L});
	public static final BitSet FOLLOW_expression_in_expressionList1393 = new BitSet(new long[]{0x0000000000010002L});
	public static final BitSet FOLLOW_LPAREN_in_nestedExpression1409 = new BitSet(new long[]{0x0406001200000000L,0x001C000440048001L});
	public static final BitSet FOLLOW_expression_in_nestedExpression1411 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_RPAREN_in_nestedExpression1413 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_multiply_in_expression1428 = new BitSet(new long[]{0x0000000000000002L,0x0000000000008001L});
	public static final BitSet FOLLOW_set_in_expression1432 = new BitSet(new long[]{0x0406001200000000L,0x001C000440048001L});
	public static final BitSet FOLLOW_multiply_in_expression1442 = new BitSet(new long[]{0x0000000000000002L,0x0000000000008001L});
	public static final BitSet FOLLOW_value_in_multiply1459 = new BitSet(new long[]{0x0000000000800002L,0x0000000010000000L});
	public static final BitSet FOLLOW_set_in_multiply1463 = new BitSet(new long[]{0x0406001200000000L,0x001C000440048001L});
	public static final BitSet FOLLOW_value_in_multiply1473 = new BitSet(new long[]{0x0000000000800002L,0x0000000010000000L});
	public static final BitSet FOLLOW_literal_in_value1512 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unary_in_value1522 = new BitSet(new long[]{0x0402000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_columnRef_in_value1533 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_nestedExpression_in_value1541 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unary_in_literal1565 = new BitSet(new long[]{0x0000001000000000L});
	public static final BitSet FOLLOW_Float_in_literal1570 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unary_in_literal1578 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_Integer_in_literal1583 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_String_in_literal1589 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TRUE_in_literal1595 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FALSE_in_literal1601 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_date_in_literal1607 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_114_in_date1620 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_Timestamp_in_date1622 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_RCURLY_in_date1624 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_115_in_date1631 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_Timestamp_in_date1633 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_RCURLY_in_date1635 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_116_in_date1642 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_Timestamp_in_date1644 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_RCURLY_in_date1646 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_tableName_in_tableRef1701 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_databaseName_in_tableRef1707 = new BitSet(new long[]{0x0000000001000000L});
	public static final BitSet FOLLOW_DOT_in_tableRef1709 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_tableName_in_tableRef1711 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_columnName_in_columnRef1726 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_tableAlias_in_columnRef1733 = new BitSet(new long[]{0x0000000001000000L});
	public static final BitSet FOLLOW_DOT_in_columnRef1735 = new BitSet(new long[]{0x0002000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_columnName_in_columnRef1737 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Identifier_in_tableAlias1792 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_joinList_in_synpred13_GeneralSQL219 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_nestedCondition_in_synpred58_GeneralSQL1064 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_in_in_synpred59_GeneralSQL1072 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_between_in_synpred60_GeneralSQL1080 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_isNull_in_synpred61_GeneralSQL1088 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_like_in_synpred63_GeneralSQL1104 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifier_in_synpred64_GeneralSQL1112 = new BitSet(new long[]{0x0000000000000002L});
}
